package hwOne4;

// 作业1.4.10
public class BinarySearchMinIndex {
    public static void main(String[] args) {
        // 示例数组（已排序）
        int[] array = {1, 2, 2, 2, 3, 4, 4, 5};

        // 待查找的目标值
        int target = 2;

        // 执行二分查找
        int index = binarySearchMinIndex(array, target);

        // 输出结果
        if (index != -1) {
            System.out.println("目标值 " + target + " 的最小索引是：" + index);
        } else {
            System.out.println("目标值 " + target + " 不存在于数组中。");
        }
    }

    /**
     * 二分查找：返回目标值的最小索引
     *
     * @param nums   已排序的数组
     * @param target 要查找的目标值
     * @return 目标值的最小索引，如果不存在则返回 -1
     */
    public static int binarySearchMinIndex(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;
        int result = -1; // 用于存储目标值的最小索引

        while (left <= right) {
            int mid = left + (right - left) / 2;

            if (nums[mid] == target) {
                // 找到目标值时，记录当前索引，但继续向左搜索
                result = mid;
                right = mid - 1;
            } else if (nums[mid] < target) {
                // 目标值在右半部分
                left = mid + 1;
            } else {
                // 目标值在左半部分
                right = mid - 1;
            }
        }

        return result;
    }
}